{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Notes:\n",
    " * revised and tuned configuration, updated views\n",
    " * training on full dataset (including Y3, new light curves, fixes)\n",
    " * trained with updated star radius estimations, multiple duplicates removed\n",
    " * removed instar examples"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['/mnt/tess/astronet/checkpoints/ext_35_run_1/1/AstroCNNModel_extended_20220328_165807',\n",
       " '/mnt/tess/astronet/checkpoints/ext_35_run_1/2/AstroCNNModel_extended_20220328_173327',\n",
       " '/mnt/tess/astronet/checkpoints/ext_35_run_1/3/AstroCNNModel_extended_20220328_180751',\n",
       " '/mnt/tess/astronet/checkpoints/ext_35_run_1/4/AstroCNNModel_extended_20220328_184213',\n",
       " '/mnt/tess/astronet/checkpoints/ext_35_run_1/5/AstroCNNModel_extended_20220328_191617',\n",
       " '/mnt/tess/astronet/checkpoints/ext_35_run_1/6/AstroCNNModel_extended_20220328_194914',\n",
       " '/mnt/tess/astronet/checkpoints/ext_35_run_1/7/AstroCNNModel_extended_20220328_202225',\n",
       " '/mnt/tess/astronet/checkpoints/ext_35_run_1/8/AstroCNNModel_extended_20220328_205525',\n",
       " '/mnt/tess/astronet/checkpoints/ext_35_run_1/9/AstroCNNModel_extended_20220328_212823',\n",
       " '/mnt/tess/astronet/checkpoints/ext_35_run_1/10/AstroCNNModel_extended_20220328_220115']"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import os\n",
    "\n",
    "chkpt_root = '/mnt/tess/astronet/checkpoints/ext_35_run_1'\n",
    "data_files = '/mnt/tess/astronet/tfrecords-35-val/*'\n",
    "tces_file = '/mnt/tess/astronet/tces-v12-val.csv'\n",
    "\n",
    "nruns = 10\n",
    "\n",
    "def load_ensemble(chkpt_root, nruns):\n",
    "    checkpts = []\n",
    "    for i in range(nruns):\n",
    "        parent = os.path.join(chkpt_root, str(i + 1))\n",
    "        if not os.path.exists(parent):\n",
    "            break\n",
    "        all_dirs = os.listdir(parent)\n",
    "        if not all_dirs:\n",
    "            break\n",
    "        d, = all_dirs\n",
    "        checkpts.append(os.path.join(parent, d))\n",
    "    return checkpts\n",
    "\n",
    "paths = load_ensemble(chkpt_root, nruns)\n",
    "paths"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Running model 1\n",
      "2461 records\n",
      "Running model 2\n",
      "2461 records\n",
      "Running model 3\n",
      "2461 records\n",
      "Running model 4\n",
      "2461 records\n",
      "Running model 5\n",
      "2461 records\n",
      "Running model 6\n",
      "2461 records\n",
      "Running model 7\n",
      "2461 records\n",
      "Running model 8\n",
      "2461 records\n",
      "Running model 9\n",
      "2461 records\n",
      "Running model 10\n",
      "2461 records\n"
     ]
    }
   ],
   "source": [
    "import getpass\n",
    "import os\n",
    "from astronet import predict\n",
    "import tensorflow as tf\n",
    "\n",
    "\n",
    "def run_predictions(path):\n",
    "    predict.FLAGS = predict.parser.parse_args([\n",
    "      '--model_dir', path,\n",
    "      '--data_files', data_files,\n",
    "      '--output_file', '',\n",
    "    ])\n",
    "\n",
    "    return predict.predict()\n",
    "\n",
    "\n",
    "paths = load_ensemble(chkpt_root, nruns)\n",
    "ensemble_preds = []\n",
    "config = None\n",
    "for i, path in enumerate(paths):\n",
    "    print(f'Running model {i + 1}')\n",
    "    preds, config = run_predictions(path)\n",
    "    ensemble_preds.append(preds.set_index('tic_id'))\n",
    "    print()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "labels = ['disp_e', 'disp_n', 'disp_j', 'disp_s', 'disp_b']\n",
    "\n",
    "col_e = labels.index('disp_e')\n",
    "thresh = 0.2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "agg_preds = {}\n",
    "\n",
    "for preds in ensemble_preds:\n",
    "    for tic_id in preds.index:\n",
    "        if tic_id not in agg_preds:\n",
    "            agg_preds[tic_id] = []\n",
    "\n",
    "        row = preds[preds.index == tic_id]\n",
    "        pred_v = row.values[0]\n",
    "        if len(row.values) > 1:\n",
    "            print(f'Warning: duplicate predictions for {tic_id}')\n",
    "        if pred_v[col_e] >= thresh:\n",
    "            agg_preds[tic_id].append('disp_e')\n",
    "        else:\n",
    "            masked_v = [v if i != col_e else 0 for i, v in enumerate(pred_v)]\n",
    "            agg_preds[tic_id].append(preds.columns[np.argmax(masked_v)])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "final_preds = []\n",
    "for tic_id in list(agg_preds.keys()):\n",
    "    counts = {l: 0 for l in labels}\n",
    "    for e in agg_preds[tic_id]:\n",
    "        counts[e] += 1\n",
    "    maxcount = max(counts.values())\n",
    "    counts.update({\n",
    "        'tic_id': tic_id,\n",
    "        'maxcount': maxcount,\n",
    "    })\n",
    "    final_preds.append(counts)\n",
    "    \n",
    "final_preds = pd.DataFrame(final_preds).set_index('tic_id')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "tce_table = pd.read_csv(tces_file, header=0).set_index('tic_id')\n",
    "for l in labels:\n",
    "    tce_table[l] = tce_table[l[:-1] + l[-1].upper()]\n",
    "tce_labels = tce_table[labels]\n",
    "\n",
    "pl = final_preds.join(tce_labels, on='tic_id', how='left', lsuffix='_p')\n",
    "\n",
    "pl.head()\n",
    "pd.set_option('display.max_columns', None)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Recall: 0.9615384615384616\n",
      "Precision: 0.7621951219512195\n"
     ]
    }
   ],
   "source": [
    "ppos = (pl['disp_e_p'] > 0)\n",
    "pos = (pl['disp_e'] > 0)\n",
    "\n",
    "pneg = (pl['disp_e_p'] == 0)\n",
    "neg = (pl['disp_e'] == 0)\n",
    "\n",
    "print('Recall:', len(pl[ppos & pos]) / len(pl[pos]))\n",
    "print('Precision:', len(pl[ppos & pos]) / len(pl[ppos]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "369264198\n",
      "28484801\n",
      "1715064237\n",
      "198356533\n",
      "199661915\n",
      "141753278\n",
      "158159741\n",
      "349412074\n",
      "404220255\n",
      "393324927\n"
     ]
    }
   ],
   "source": [
    "for i in pl[pos & pneg][[]].join(tce_table, on='tic_id', how='left').index:\n",
    "    print(i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "356776209\n",
      "416282321\n",
      "136651206\n",
      "277848886\n",
      "278555119\n",
      "278910035\n",
      "395164445\n",
      "417208086\n",
      "252588526\n",
      "431338538\n",
      "192591652\n",
      "312060273\n",
      "450006142\n",
      "127846210\n",
      "261814771\n",
      "269291226\n",
      "280806973\n",
      "408945155\n",
      "648359612\n",
      "82242456\n",
      "142751024\n",
      "158436739\n",
      "56861756\n",
      "30318046\n",
      "101496204\n",
      "149970599\n",
      "234338417\n",
      "238829802\n",
      "281543210\n",
      "335588842\n",
      "842068824\n",
      "97487520\n",
      "159636125\n",
      "202467266\n",
      "230197530\n",
      "284266496\n",
      "233197293\n",
      "118398402\n",
      "177309966\n",
      "183076970\n",
      "183306276\n",
      "201601338\n",
      "238200877\n",
      "270247428\n",
      "271999852\n",
      "276738707\n",
      "276783657\n",
      "279322995\n",
      "291374558\n",
      "300153494\n",
      "311103813\n",
      "311250324\n",
      "31868634\n",
      "319865847\n",
      "320356995\n",
      "326693475\n",
      "341119264\n",
      "363404187\n",
      "373919592\n",
      "379191982\n",
      "384740598\n",
      "38570890\n",
      "404851508\n",
      "404851552\n",
      "404851966\n",
      "40602499\n",
      "406091286\n",
      "406943526\n",
      "407615704\n",
      "410087746\n",
      "41256189\n",
      "419611478\n",
      "62807165\n",
      "283330382\n",
      "14209654\n",
      "185607431\n",
      "188258751\n",
      "202685576\n"
     ]
    }
   ],
   "source": [
    "for i in pl[neg & ppos][[]].join(tce_table, on='tic_id', how='left').index:\n",
    "    print(i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>disp_e</th>\n",
       "      <th>disp_n</th>\n",
       "      <th>disp_j</th>\n",
       "      <th>disp_s</th>\n",
       "      <th>disp_b</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>tic_id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>416282321</th>\n",
       "      <td>0.026397</td>\n",
       "      <td>0.240785</td>\n",
       "      <td>0.943141</td>\n",
       "      <td>0.001914</td>\n",
       "      <td>0.102822</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>416282321</th>\n",
       "      <td>0.035916</td>\n",
       "      <td>0.263594</td>\n",
       "      <td>0.928273</td>\n",
       "      <td>0.007327</td>\n",
       "      <td>0.081290</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>416282321</th>\n",
       "      <td>0.058070</td>\n",
       "      <td>0.231491</td>\n",
       "      <td>0.896986</td>\n",
       "      <td>0.006937</td>\n",
       "      <td>0.069274</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>416282321</th>\n",
       "      <td>0.141564</td>\n",
       "      <td>0.190726</td>\n",
       "      <td>0.775667</td>\n",
       "      <td>0.014300</td>\n",
       "      <td>0.047534</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>416282321</th>\n",
       "      <td>0.263612</td>\n",
       "      <td>0.261743</td>\n",
       "      <td>0.644725</td>\n",
       "      <td>0.004002</td>\n",
       "      <td>0.063144</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>416282321</th>\n",
       "      <td>0.468319</td>\n",
       "      <td>0.149335</td>\n",
       "      <td>0.450322</td>\n",
       "      <td>0.003772</td>\n",
       "      <td>0.044334</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>416282321</th>\n",
       "      <td>0.067633</td>\n",
       "      <td>0.269859</td>\n",
       "      <td>0.869229</td>\n",
       "      <td>0.007350</td>\n",
       "      <td>0.114812</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>416282321</th>\n",
       "      <td>0.107288</td>\n",
       "      <td>0.166508</td>\n",
       "      <td>0.857825</td>\n",
       "      <td>0.010444</td>\n",
       "      <td>0.044141</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>416282321</th>\n",
       "      <td>0.159450</td>\n",
       "      <td>0.260563</td>\n",
       "      <td>0.693712</td>\n",
       "      <td>0.006287</td>\n",
       "      <td>0.051726</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>416282321</th>\n",
       "      <td>0.047500</td>\n",
       "      <td>0.232950</td>\n",
       "      <td>0.874118</td>\n",
       "      <td>0.011473</td>\n",
       "      <td>0.136519</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             disp_e    disp_n    disp_j    disp_s    disp_b\n",
       "tic_id                                                     \n",
       "416282321  0.026397  0.240785  0.943141  0.001914  0.102822\n",
       "416282321  0.035916  0.263594  0.928273  0.007327  0.081290\n",
       "416282321  0.058070  0.231491  0.896986  0.006937  0.069274\n",
       "416282321  0.141564  0.190726  0.775667  0.014300  0.047534\n",
       "416282321  0.263612  0.261743  0.644725  0.004002  0.063144\n",
       "416282321  0.468319  0.149335  0.450322  0.003772  0.044334\n",
       "416282321  0.067633  0.269859  0.869229  0.007350  0.114812\n",
       "416282321  0.107288  0.166508  0.857825  0.010444  0.044141\n",
       "416282321  0.159450  0.260563  0.693712  0.006287  0.051726\n",
       "416282321  0.047500  0.232950  0.874118  0.011473  0.136519"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def compare(ensemble_preds, filter):\n",
    "    result = ensemble_preds[0][filter]\n",
    "    for preds in ensemble_preds[1:]:\n",
    "        result = result.append(preds[filter])\n",
    "    return result\n",
    "\n",
    "compare(ensemble_preds, preds.index == 416282321)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>disp_e_p</th>\n",
       "      <th>disp_n_p</th>\n",
       "      <th>disp_j_p</th>\n",
       "      <th>disp_s_p</th>\n",
       "      <th>disp_b_p</th>\n",
       "      <th>maxcount</th>\n",
       "      <th>disp_e</th>\n",
       "      <th>disp_n</th>\n",
       "      <th>disp_j</th>\n",
       "      <th>disp_s</th>\n",
       "      <th>disp_b</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>tic_id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "Empty DataFrame\n",
       "Columns: [disp_e_p, disp_n_p, disp_j_p, disp_s_p, disp_b_p, maxcount, disp_e, disp_n, disp_j, disp_s, disp_b]\n",
       "Index: []"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pl[pl.index == 340066802]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### PR curve"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "tics = set(ensemble_preds[0].index.values)\n",
    "\n",
    "tic_index = {v: i for i, v in enumerate(tics)}\n",
    "\n",
    "pred_es = np.zeros([len(ensemble_preds), len(tic_index)])\n",
    "for i, preds in enumerate(ensemble_preds):\n",
    "    for row in preds.iterrows():\n",
    "        tic, pred_e = row[0], row[1][col_e]\n",
    "        pred_es[i][tic_index[tic]] = pred_e\n",
    "\n",
    "lbl_es = np.zeros([len(tic_index)], dtype=np.bool)\n",
    "for row in tce_labels.iterrows():\n",
    "    tic, lbl_e = row[0], row[1]['disp_e']\n",
    "    if tic in tic_index:\n",
    "        lbl_es[tic_index[tic]] = (lbl_e > 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_cond_pos = int(np.sum(lbl_es))\n",
    "\n",
    "def pr_at_th(th):\n",
    "    pred_pos = np.any(pred_es >= th, axis=0)\n",
    "    true_pos = pred_pos & lbl_es\n",
    "    num_pred_pos = int(np.sum(pred_pos))\n",
    "    num_true_pos = int(np.sum(true_pos))\n",
    "    if num_pred_pos == 0:\n",
    "        return 1.0, 0.0\n",
    "    return float(num_true_pos) / float(num_pred_pos), float(num_true_pos) / float(num_cond_pos)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "AUC: 0.9721019601616727, max R: 1.0, max P: 1.0\n",
      "100% recall at: 24%, threshold: 0.0025000000000546265\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1200x740 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib import pyplot as plt\n",
    "\n",
    "ps, rs, ths = ([], [], [])\n",
    "th = np.max(pred_es)\n",
    "while th >= 0.0:\n",
    "    p, r = pr_at_th(th)\n",
    "    ps.append(p)\n",
    "    rs.append(r)\n",
    "    ths.append(th)\n",
    "    th -= 0.0005\n",
    "    \n",
    "from sklearn import metrics\n",
    "\n",
    "print(f'AUC: {metrics.auc(rs, ps)}, max R: {max(rs)}, max P: {max(ps)}')\n",
    "    \n",
    "i = len(rs) - 1\n",
    "while rs[i] == 1.0:\n",
    "    i -= 1\n",
    "i += 1\n",
    "print(f'100% recall at: {int(ps[i] * 100)}%, threshold: {ths[i]}')\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(6, 3.7), dpi=200)\n",
    "\n",
    "ax.spines['top'].set_color('#808080')\n",
    "ax.spines['right'].set_color('#808080')\n",
    "ax.spines['left'].set_color('#808080')\n",
    "ax.spines['bottom'].set_color('#808080')\n",
    "ax.tick_params(direction='in', color='#808080')\n",
    "\n",
    "plt.grid(color='#c0c0c0', linestyle='--', linewidth=0.5)\n",
    "\n",
    "plt.ylabel('Precision', fontweight='bold')\n",
    "plt.xlabel('Recall', fontweight='bold')\n",
    "\n",
    "plt.xlim((0.0, 1.0))\n",
    "plt.ylim((0.0, 1.0))\n",
    "\n",
    "_ = plt.plot(rs, ps)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
